<?php
class GameController extends CAdminController {

    public $layout = 'column2';

    /**
     * @var CActiveRecord the currently loaded data model instance.
     */
    private $_model;

    /**
     * @return array action filters
     */
    public function filters() {
        return array(
            'accessControl', // perform access control for CRUD operations
        );
    }

    /**
     * Specifies the access control rules.
     * This method is used by the 'accessControl' filter.
     * @return array access control rules
     */
    public function accessRules() {                
        return array(            
            array('allow', // allow authenticated users to access all actions
                'roles' => array('administrator'),
            ),
            array('deny', // deny all users
                'users' => array('*'),
            ),
        );
    }

    /**
     * This is the default 'index' action that is invoked
     * when an action is not explicitly requested by users.
     */
    public function actionIndex() {
        // renders the view file 'protected/views/site/index.php'
        // using the default layout 'protected/views/layouts/main.php'          
        $model = new Game('search');
        if (isset($_GET['Game']))
            $model->attributes = $_GET['Game'];
        $this->render('index', array(
            'model' => $model,
        ));
    }        

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate() {
        $model = new Game();
        if (isset($_POST['Game'])) {
            $model->attributes = $_POST['Game'];
            $model->meta_title = $_POST['Game']['meta_title'];
            $model->meta_keyword = $_POST['Game']['meta_keyword'];
            $model->meta_description = $_POST['Game']['meta_description'];
            $model->description_j2me = $_POST['Game']['description_j2me']; 
            $model->tags = $_POST['Game']['tags'];
            $model->alt = $_POST['Game']['alt'];
            $model->category_id = $_POST['category_id'];             
            if (!empty($_FILES['image']) && $_FILES['image']['size'] > 0) {
                $filename = $_FILES['image']['name'];
                $pos = strrpos($filename, '.');
                $name = substr($filename, 0, $pos);
                $name = strtolower(str_replace(' ', '-', Myvietstring::removeVietChars($name)));
                $name = Myvietstring::removeInvalidCharacter($name);
                //$name = strlen(strlen($name) > 20) ? substr($name, 0, 20) : $name;
                $ext = pathinfo($filename, PATHINFO_EXTENSION);
                // $real_name = $name . '.' . $ext;
                $name.= '-' . time();
                $name.= '.' . $ext;
                $fullpath = 'files/games/' . $name;
                move_uploaded_file($_FILES['image']['tmp_name'], $fullpath);
                $model->image = $name;                
                
                $image = new Myimage();
                $image->load($fullpath);
                $image->resize(50,50);
                $image->save('files/games/50x50-' . $name);   
                
                $image->resize(250,250);
                $image->save('files/games/150x150-' . $name);       
                
                if (empty($model->slug)) {
                    $slug = Common::simpleSlug($model->name);
                    $slug = $slug . ".htm";
                }
                $tmp = Game::model()->find('slug ="' . $slug . '"');
                if (!empty($tmp)) {
                    $tmp1 = explode('.', $slug);
                    if (count($tmp1) > 1) {
                        $slug = $tmp1[0] . "-" . $tmp->id;
                        $slug = $slug . "." . $tmp1[1];
                    } else {
                        $slug = $slug . "-2";
                    }
                }
                $model->slug = $slug;                
                
                if ($model->save()){
                    $platform = Yii::app()->request->getParam('platform');
                    if(isset($platform) && is_array($platform)){
                        foreach($platform as $item){
                            $platformGameModel = new GamePlatform();
                            $platformGameModel->game_id = $model->id;
                            $platformGameModel->platform_id = $item;                            
                            $platformGameModel->save();
                        }
                    }
                    Common::updateSitemap();
                    $this->redirect(array('update', 'id' => $model->id));
                }
            }else{
                Common::alert("Không có ảnh đại diện", Yii::app()->request->urlReferrer);
            }
            
        }

        $this->render('create', array(
            'model' => $model,
        ));
    }

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     */
    public function actionUpdate() {               
        $model = $this->loadModel();                
        if (isset($_POST['Game'])) {                     
            $model->attributes = $_POST['Game']; 
            $model->meta_title = $_POST['Game']['meta_title'];
            $model->meta_keyword = $_POST['Game']['meta_keyword'];
            $model->meta_description = $_POST['Game']['meta_description'];
            $model->description_j2me = $_POST['Game']['description_j2me']; 
            $model->slug = $_POST['Game']['slug'];
            $model->tags = $_POST['Game']['tags'];
            $model->alt = $_POST['Game']['alt'];
            $model->category_id = $_POST['category_id'];                    
            if (!empty($_FILES['image']) && $_FILES['image']['size'] > 0) {
                $filename = $_FILES['image']['name'];                
                $pos = strrpos($filename, '.');
                $name = substr($filename, 0, $pos);
                $name = strtolower(str_replace(' ', '-', Myvietstring::removeVietChars($name)));
                $name = Myvietstring::removeInvalidCharacter($name);
                //$name = strlen(strlen($name) > 20) ? substr($name, 0, 20) : $name;
                $ext = pathinfo($filename, PATHINFO_EXTENSION);
                // $real_name = $name . '.' . $ext;
                $name.= '-' . time();
                $basename = $name;
                $name.= '.' . $ext;
                $fullpath = 'files/games/' . $name;
                move_uploaded_file($_FILES['image']['tmp_name'], $fullpath);                
                $model->image = $name;      
                
                $image = new Myimage();
                $image->load($fullpath);
                $image->resize(50,50);
                $image->save('files/games/50x50-' . $name); 
                
                $image->resize(250,250);
                $image->save('files/games/150x150-' . $name);   
            }     
            if (empty($model->slug)) {
                $slug = Common::simpleSlug($model->name);
                $slug = $slug . ".htm";
            }else{
                $slug = $model->slug;
            }            
            $tmp = Game::model()->find('id != '.$model->id.' AND slug ="' . $slug . '"');
            if (!empty($tmp)) {
                $tmp1 = explode('.', $slug);
                if (count($tmp1) > 1) {
                    $slug = $tmp1[0] . "-" . $model->id;
                    $slug = $slug . "." . $tmp1[1];
                } else {
                    $slug = $slug . "-2";
                }
            }
            $model->slug = $slug;
            
            if ($model->save()){
                $platform = Yii::app()->request->getParam('platform');                
                $arrayTmp = array();
                $platformModel = GamePlatform::model()->findAll('game_id='.$model->id);
                foreach ($platformModel as $value){
                    if(!in_array($value->platform_id, $platform)){
                        if(count($value->gameVersions)>0)
                            Common::alert("Bạn cần xóa version trước khi thực hiện hành động này",Yii::app()->request->urlReferrer);
                        $value->delete();                    
                    }
                    array_push($arrayTmp, $value->platform_id);
                }                
                if(isset($platform) && is_array($platform)){
                    foreach($platform as $item){      
                        if(!in_array($item, $arrayTmp)){
                            $platformGameModel = new GamePlatform();
                            $platformGameModel->game_id = $model->id;
                            $platformGameModel->platform_id = $item;
                            $platformGameModel->save();
                        }else{
                            $platformGameModel1 = GamePlatform::model()->find('platform_id='.$item.' AND game_id='.$model->id);
                            $post = $platformGameModel1->platform->code_identifier;                            
                            $platformGameModel1->market_url = Yii::app()->request->getParam($post);
                            $platformGameModel1->save();
                        }
                    }                    
                }
                Common::updateSitemap();
                Common::alert('Update thành công', Yii::app()->request->urlReferrer);                
            }            
        }

        $this->render('update', array(
            'model' => $model,
        ));
    }

    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'index' page.
     */
    public function actionDelete() {
        if (Yii::app()->request->isPostRequest) {
            // we only allow deletion via POST request
            $this->loadModel()->delete();

            // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
            if (!isset($_GET['ajax']))
                $this->redirect(array('index'));
        }
        else
            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
    }
    
    public function actionDetail(){  
        $game_id = Yii::app()->request->getParam('id',NULL);  
        $dataGamePlatform= new CActiveDataProvider('GamePlatform', array(
                            'criteria' => array(
                                'condition' => 'game_id= '.$game_id, 
                            ),
                        ));        
        $this->render('version', array(
            'dataGamePlatform' => $dataGamePlatform
        ));
    }        
    
    public function actionCreateVersion(){
        $game_id = Yii::app()->request->getParam('game_id');
        if(!isset($game_id) || !is_numeric($game_id))
            Common::alert("Đầu vào không đúng", Yii::app()->homeUrl);
        $gameModel = Game::model()->findByPk($game_id);        
        if(!isset($gameModel))
            Common::alert("Game không tồn tại", Yii::app()->homeUrl);
        $model = new GameVersion();
        if (isset($_POST['GameVersion'])) {
            $model->attributes = $_POST['GameVersion'];
            $model->game_platform_id = $_POST['GameVersion']['game_platform_id'];    
            $model->description = $_POST['GameVersion']['description'];      
            
            $gamePlatformModel = GamePlatform::model()->findByPk($model->game_platform_id);
            if(!isset($gamePlatformModel))
                Common::alert("Nền tảng không tồn tại", Yii::app()->request->urlReferrer);
            
            if (!empty($_FILES['file_path']) && $_FILES['file_path']['size'] > 0) {
                $filename = $_FILES['file_path']['name'];
                $ext = pathinfo($filename, PATHINFO_EXTENSION);
                $name = $gamePlatformModel->game->code_identifier . '-' . $gamePlatformModel->platform->code_identifier . '-' . $model->core_version . '.' . $model->build_version . '.' . $model->code_revision . '-' . time() . '.' . $ext;
                $fullpath = 'files/versions/' . $name;
                move_uploaded_file($_FILES['file_path']['tmp_name'], $fullpath);
                $model->file_path = $fullpath;
                $model->size = floor($_FILES['file_path']['size'] / 1024);
                
                if(!empty($_FILES['file_path2']) && $_FILES['file_path2']['size'] > 0){
                    $filename = $_FILES['file_path2']['name'];
                    $ext = pathinfo($filename, PATHINFO_EXTENSION);
                    $name = $gamePlatformModel->game->code_identifier . '-' . $gamePlatformModel->platform->code_identifier . '-' . $model->core_version . '.' . $model->build_version . '.' . $model->code_revision . '-' . time() . '.' . $ext;
                    $fullpath = 'files/versions/' . $name;
                    move_uploaded_file($_FILES['file_path2']['tmp_name'], $fullpath);
                    $model->file_path2 = $fullpath;                                        
                }
                
                if($model->enabled == 1){
                    $gameVersionModel = GameVersion::model()->findAll('game_platform_id = '.$gamePlatformModel->id.' AND enabled = 1');
                    if(isset($gameVersionModel))
                        foreach($gameVersionModel as $item){
                            $item->enabled = 0;
                            $item->save();
                        }
                }
                
                if($model->save()){
                    Common::alert('Tạo mới thành công', Yii::app()->createUrl('admin/game/updateVersion?id='.$model->id));
                }else{
                    Common::dump($model->errors);die;
                }
            } else {
                Common::alert('Bạn phải lựa chọn file upload', Yii::app()->request->urlReferrer);
            }                        
            
        }

        $this->render('createVersion', array(
            'model' => $model,           
            'gameModel' => $gameModel
        ));
    }
    
    public function actionUpdateVersion(){
        $id = Yii::app()->request->getParam('id');
        if(!isset($id) || !is_numeric($id))
            Common::alert("Đầu vào không đúng", Yii::app()->homeUrl);
        $model = GameVersion::model()->findByPk($id);
        if(!isset($model))
            Common::alert("Version không tồn tại", Yii::app()->homeUrl);
        $gameModel = Game::model()->findByPk($model->gamePlatform->game->id);        
        if(!isset($gameModel))
            Common::alert("Game không tồn tại", Yii::app()->homeUrl);
        
        if (isset($_POST['GameVersion'])) {
            $model->attributes = $_POST['GameVersion'];            
            $model->game_platform_id = $_POST['GameVersion']['game_platform_id'];    
            $model->description = $_POST['GameVersion']['description'];    
            
            $gamePlatformModel = GamePlatform::model()->findByPk($model->game_platform_id);
            
            if(!isset($gamePlatformModel))
                Common::alert("Nền tảng không tồn tại", Yii::app()->request->urlReferrer);
            
            if (!empty($_FILES['file_path']) && $_FILES['file_path']['size'] > 0) {
                $filename = $_FILES['file_path']['name'];
                $ext = pathinfo($filename, PATHINFO_EXTENSION);
                $name = $gamePlatformModel->game->code_identifier . '-' . $gamePlatformModel->platform->code_identifier . '-' . $model->core_version . '.' . $model->build_version . '.' . $model->code_revision . '-' . time() . '.' . $ext;
                $fullpath = 'files/versions/' . $name;
                move_uploaded_file($_FILES['file_path']['tmp_name'], $fullpath);
                $model->file_path = $fullpath;
                $model->size = floor($_FILES['file_path']['size'] / 1024);                                
            } 
            
            if (!empty($_FILES['file_path2']) && $_FILES['file_path2']['size'] > 0) {
                $filename = $_FILES['file_path2']['name'];
                $ext = pathinfo($filename, PATHINFO_EXTENSION);
                $name = $gamePlatformModel->game->code_identifier . '-' . $gamePlatformModel->platform->code_identifier . '-' . $model->core_version . '.' . $model->build_version . '.' . $model->code_revision . '-' . time() . '.' . $ext;
                $fullpath = 'files/versions/' . $name;
                move_uploaded_file($_FILES['file_path2']['tmp_name'], $fullpath);
                $model->file_path2 = $fullpath;                                                
            } 
            
            if($model->enabled == 1){
                $gameVersionModel = GameVersion::model()->findAll('game_platform_id = '.$gamePlatformModel->id.' AND enabled = 1');
                if(isset($gameVersionModel))
                    foreach($gameVersionModel as $item){
                        $item->enabled = 0;
                        $item->save();
                    }
            }
            
            if($model->save()){
                Common::alert('Update thành công', Yii::app()->createUrl('admin/game/updateVersion?id='.$model->id));
            }else{
                Common::dump($model->errors);die;
            }
            
        }

        $this->render('updateVersion', array(
            'model' => $model,           
            'gameModel' => $gameModel
        ));
    }
    
    public function actionDeleteVersion() {
        if (Yii::app()->request->isPostRequest) {
            // we only allow deletion via POST request
            $id = Yii::app()->request->getParam('id');
            $game_id = Yii::app()->request->getParam('game_id');
            $gameVersion = GameVersion::model()->findByPk($id);
            $gameVersion->delete();

            // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
            if (!isset($_GET['ajax']))
                $this->redirect(Yii::app()->createUrl('admin/game/detail?id='.$game_id));
        }
        else
            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
    }
    
    public function actionOrder(){     
        if($_POST){
            $game = Yii::app()->request->getParam('game');
            if(isset($game)){
                foreach($game as $index => $item){
                    $gameModel = GamePlatform::model()->findByPk($item);
                    $gameModel->order = $index+1;
                    $gameModel->save();
                }
            }
        }
        $dataPlatform= new CActiveDataProvider('Platform', array(
                            'criteria' => array(
                                //'condition' => 'game_id= '.$game_id, 
                            ),
                        ));        
        $this->render('order', array(
            'dataPlatform' => $dataPlatform
        ));                
    }
    

    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     */
    public function loadModel() {
        if ($this->_model === null) {            
            if (isset($_GET['id'])) {                
                $this->_model = Game::model()->findByPk($_GET['id']);
            }
            if ($this->_model === null)
                throw new CHttpException(404, 'The requested page does not exist.');
        }        
        return $this->_model;
    }

    /**
     * This is the action to handle external exceptions.
     */
    public function actionError() {
        if ($error = Yii::app()->errorHandler->error) {
            if (Yii::app()->request->isAjaxRequest)
                echo $error['message'];
            else
                $this->render('error', $error);
        }
    }

}